package com.atguigu.xiaozhi.assistant;

import dev.langchain4j.service.MemoryId;
import dev.langchain4j.service.SystemMessage;
import dev.langchain4j.service.UserMessage;
import dev.langchain4j.service.V;
import dev.langchain4j.service.spring.AiService;
import reactor.core.publisher.Flux;

import static dev.langchain4j.service.spring.AiServiceWiringMode.EXPLICIT;

/**
 * @author kkdulx
 * @date 2025/10/27
 */

@AiService(
        wiringMode = EXPLICIT,
        // 使用流式输出模型
        streamingChatModel = "qwenStreamingChatModel",
        chatMemoryProvider = "chatMemoryProviderXiaozhi",
        // tools配置
        tools = "appointmentTools",
        // 配置向量存储
        contentRetriever = "contentRetrieverXiaozhiPincone"
)
public interface XiaozhiAgent {
    @SystemMessage(fromResource = "xiaozhi-prompt-template.txt")
    @UserMessage(fromResource = "xiaozhi-prompt-user-template.txt")

    /*
        不能同时使用两个 @UserMessage 注解
        LangChain4j 1.0.0-beta3 版本要求接口方法的所有参数必须添加指定注解
        @V 注解的作用是 “将参数值注入到模板的变量中”
        参数传用户输入” 的场景，同时避免 @UserMessage 重复的问题。
     */
    Flux<String> chat(@MemoryId Long memoryId,@V("userMessage") String userMessage);
}
